package com.study.lu;

public class 香槟塔 {
    /**
     * 如图所示
     * 1111*
     * 111* *
     * 11* * *
     * 1* * * *
     * * * * * *
     * <p>
     * 每个*代表一个装香槟的容器。现在从第一行倒入香槟，当第一行倒满时候，会均匀的溢出到第二层。
     * 第二层满的时候会均匀溢出到第三行，请问我倒了N杯香槟。求R行C列中香槟有多少
     * <p>
     * 题解
     * 1.如果第N行C列杯子内的香槟倒满，这个杯子多余的香槟会流向他下一层N+1，两个相邻的杯子，并且这两个杯子的列号是C,C+1
     * 2.一个杯子可能有多个流入口。因为有些杯子跟上一级有多个相连。
     * <p>
     * 代码实现
     * 1.可以把上面的图理解成一个二位数组，并且每一行的列数，不会大于当前行的行数。
     * 2.当某个坐标值大于1的话，那么他就需要往下一层溢出
     *
     * @param args
     */
    public static void main(String[] args) {
        double[][] arrs = new double[100][100];
        // 求倒入5杯 第三行第二列杯子中的香槟的容量
        int resRow =2;
        int resCol =2;
        arrs[0][0] = 5;
        for (int row = 0; row < 3; row++) {
            for (int col = 0; col <= row; col++) {
                if (arrs[row][col] > 1) {
                    double 溢出 = arrs[row][col] - 1;
                    arrs[row + 1][col] += 溢出 / 2;
                    arrs[row + 1][col + 1] += 溢出 / 2;
                }
            }
        }

        System.out.println(arrs[resRow][resCol]);

    }
}
